/*
 * Clase Action de usuarios
 */
package com.proyecto.track.action;

import java.util.List;

import org.apache.log4j.*;

import com.opensymphony.xwork2.ActionSupport;
import com.proyecto.track.bo.Rol;
import com.proyecto.track.bo.Usuario;
import com.proyecto.track.service.IProyectoService;

/**
 * La clase Action de usuarios, que tiene todos los Actions de struts
 * correspondientes a usarios.
 */
@SuppressWarnings("serial")
public class UsuarioAction extends ActionSupport{

	/** El service al que le vamos a pedir cosas */
	private IProyectoService proyectoService;
	
	/** El logger. */
	private Logger log = Logger.getLogger(UsuarioAction.class);
	
	/** Un usuario */
	private Usuario usuario;
	
	/** Todos los usuarios */
	private List<Usuario> usuarios;
	
	/** Todos los roles */
	private List<Rol> roles;
	
	/** El rol seleccionado en el combo */ 
	private Long selectedRol;
	
	/**
	 * Genera el form con un usuario en blanco si estamos creando o el usuario
	 * instanciado si estamos editando.
	 * 
	 * @return INPUT para struts
	 * 	
	 */
	public String input(){
		log.info(this.getClass().getCanonicalName() + " - Inicializando input de usuario ");
		
		if(usuario == null){
			usuario = new Usuario();
		}
		else if (usuario.getIdUsuario() != null) {
			usuario = getProyectoService().recuperarUsuario(usuario.getIdUsuario());
		}
	
		roles = getProyectoService().getAllRoles();
		return INPUT;
	}
	
	/**
	 * Guarda o actualiza un usuario seg�n corresponda. 
	 * Si el usuario no tiene id, crea uno nuevo y si ya tiene, lo actualiza.
	 * 
	 * @return SUCCESS para struts
	 */
	public String guardar()  {
		log.info(this.getClass().getCanonicalName() + " - llamando a guardar usuario ");
		
		if (usuario != null){
			usuario.addRol(proyectoService.recuperarRol(selectedRol));
			if (usuario.getIdUsuario() == null) {
				getProyectoService().crearUsuario(usuario);
			} else {
				getProyectoService().actualizarUsuario(usuario);
			}
		}
		
		return SUCCESS;	
	}
	
	/**
	 * Borra un usuario
	 * 
	 * @return SUCCESS para struts
	 */
	public String borrar() {
		log.info(this.getClass().getCanonicalName() + " - borrando usuario ");
		
		if (usuario.getIdUsuario() != null) {
			try {
				getProyectoService().borrarUsuario(usuario.getIdUsuario());
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return SUCCESS;
	}
	
	/**
	 * Llena toda la lista de usuarios.
	 * 
	 * @return SUCCESS para struts.
	 */
	public String listar(){
		log.info(this.getClass().getCanonicalName() + "llamando a listar usuarios");
		
		usuarios = proyectoService.getAllUsuarios();
		
		return SUCCESS;
	}

	
	public void setProyectoService(IProyectoService proyectoService) {
		this.proyectoService = proyectoService;
	}
	public IProyectoService getProyectoService() {
		return proyectoService;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public List<Rol> getRoles() {
		return roles;
	}

	public void setRoles(List<Rol> roles) {
		this.roles = roles;
	}

	public void setSelectedRol(Long selectedRol) {
		this.selectedRol = selectedRol;
	}

	public Long getSelectedRol() {
		return selectedRol;
	}


}
